import util.PrestoJDBCTool;
import util.SQLConstant;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Xiahu
 * @create 2023/8/3 0003
 * <p>
 * paper、patent作者人名消歧系统数据处理 -- 拼接json数据并请求接口
 * <p>
 * 1、查询未请求接口的人名
 * 2、删除 paper_author_name_tmp、patent_author_name_tmp 数据
 * 3、根据人名,查询paper_author_name 生成 paper_author_name_tmp 数据
 * 4、根据人名,查询patent_author_name 生成 patent_author_name_tmp 数据
 * 5、根据paper_author_name_tmp、patent_author_name_tmp的数据，解析并拼接为请求数据的json
 * 6、请求接口
 * 7、将数据落地到 name_disambiguate 表
 */
public class AuthorNameDisambiguationMain {
    public static void main(String[] args) {
        PrestoJDBCTool jdbcTool = new PrestoJDBCTool();

        // 未请求接口的人名
        Map<String, String> notProcessNameMap = new HashMap<>();

        try {
            jdbcTool.connect();
            //1、查询未请求接口的人名
            ResultSet resultSet = jdbcTool.statement.executeQuery(SQLConstant.notProcessAuthorNameQuery);
            while (resultSet.next()) {
                notProcessNameMap.put(resultSet.getString("author_name"), resultSet.getString("query_name"));
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }

        for (Map.Entry<String, String> entry : notProcessNameMap.entrySet()) {
            try {
                String authorName = entry.getKey();
                if (authorName.contains("'")) {
                    continue;
                }


                String queryName = entry.getValue();
                System.out.println(queryName);
                if (null == queryName || "".equals(queryName)) {
                    continue;
                }

                //2、删除 paper_author_name_tmp、patent_author_name_tmp 数据
                jdbcTool.statement.execute(SQLConstant.deletePaperTmp);
                jdbcTool.statement.execute(SQLConstant.deletePatentTmp);

                //3、根据人名,查询paper_author_name 生成 paper_author_name_tmp 数据
                jdbcTool.statement.execute(String.format(SQLConstant.queryForPaperTmp, authorName));

                //4、根据人名,查询patent_author_name 生成 patent_author_name_tmp 数据
                jdbcTool.statement.execute(String.format(SQLConstant.queryForPatentTmp, authorName));

                //System.out.println(SQLConstant.accessInterfaceSQL);
                //解析数据,请求接口,返回json,落地数据
                jdbcTool.statement.execute(SQLConstant.accessInterfaceSQL);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        try {
            jdbcTool.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
